<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // var a = 2
    // if (a) {
    //   var b = 3
    //   let c = 4
    // }
    // console.log(b)
    // console.log(c)
    // function fn() {
      
    // }
    // 块作用域: 非函数大括号限制的空间

    for(let i=0;i<5;i++) {
      setTimeout(() => {
        console.log(i)  // 01234
      }, 0)
    }

    /* 
    {
      let i = 0
      setTimeout(() => {
        console.log(i)  // 01234
      }, 0)
    }

    {
      let i = 1
      setTimeout(() => {
        console.log(i)  // 01234
      }, 0)
    }

    {
      let i = 2
    }

    {
      let i = 3
    }

    {
      let i = 4
    }
    
    */


    /* 
    1. 执行函数定义: 创建函数对象, 如果函数有名称, 还会定义函数名称变量, 并将函数对象赋值给这个变量
    2. 执行函数: 执行函数对象内部包含语句(函数对象必须已经存在了) 

    只有执行过了函数定义， 才能调用函数
    */
    fn()
    function fn () {
      console.log('fn()')
    }
    
    

   


  </script>
</body>
</html>